home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / disk / cdrom / MusicBox-2.1os.lha / MusicBox / Archive-GUI.c next >
Encoding:
C/C++ Source or Header  |  2000-09-29  |  10.3 KB  |  367 lines

  1. /*
  2.  ##########################################################################
  3.  ####                                                                  ####
  4.  ####                        The MusicBox Project                      ####
  5.  ####                    ============================                  ####
  6.  ####                                                                  ####
  7.  #### Archive-GUI.c                                                    ####
  8.  ####                                                                  ####
  9.  #### Version 2.1os  --  September 29, 2000                            ####
  10.  ####                                                                  ####
  11.  #### Copyright (C) 1994  Thomas Dreibholz                             ####
  12.  ####               2000  Molbachweg 7                                 ####
  13.  ####                     51674 Wiehl                                  ####
  14.  ####                     Germany                                      ####
  15.  ####                                                                  ####
  16.  ####                     EMail: Dreibholz@bigfoot.com                 ####
  17.  ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
  18.  ####                                                                  ####
  19.  ##########################################################################
  20. */
  21. /***************************************************************************
  22.  *                                                                         *
  23.  *   This program is free software; you can redistribute it and/or modify  *
  24.  *   it under the terms of the GNU General Public License as published by  *
  25.  *   the Free Software Foundation; either version 2 of the License, or     *
  26.  *   (at your option) any later version.                                   *
  27.  *                                                                         *
  28.  ***************************************************************************/
  29.  
  30. /* MusicBoxArchive Benutzeroberfläche */
  31.  
  32. #include "Archive-GUI.h"
  33. #include "Archive.h"
  34.  
  35. extern BOOL            LowRes,FastExit;
  36.  
  37. struct Screen         *Scr = NULL;
  38. UBYTE                 *PubScreenName = NULL;
  39. APTR                   VisualInfo = NULL;
  40. struct Window         *KatalogWnd = NULL;
  41. struct Gadget         *KatalogGList = NULL;
  42. struct Menu           *KatalogMenus = NULL;
  43. struct IntuiMessage    KatalogMsg;
  44. struct TextFont       *Font       = NULL;
  45. struct Gadget         *KatalogGadgets[4];
  46. extern struct List     Liste1,Liste2;
  47. UWORD                  KatalogLeft = 0;
  48. UWORD                  KatalogTop = 32;
  49. UWORD                  KatalogWidth = 632;
  50. UWORD                  KatalogHeight = 246;
  51. UBYTE                 *KatalogWdt = (UBYTE *)TITEL;
  52.  
  53. struct TextAttr topaz11 = {
  54.    ( STRPTR )"times.font", 15, 0x00, 0x00 };
  55.  
  56. #define TEXTE 16
  57.  
  58. UBYTE *Texte[TEXTE]=
  59. {
  60.  "Project",
  61.  "Load preferences",
  62.  "Save preferences",
  63.  NULL,
  64.  "Setup printer...",
  65.  "Print...",
  66.  NULL,
  67.  "Iconify...",
  68.  "About...",
  69.  "Help...",
  70.  NULL,
  71.  "Quit Music Box Archive",
  72.  "Preferences",
  73.  "Auto-save",
  74.  "Search",
  75.  "Search title..."
  76. };
  77.  
  78. struct NewMenu KatalogNewMenu[] = {
  79.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  80.    NM_ITEM, NULL, (STRPTR)"L", 0, 0L, (APTR)PrefsLaden,
  81.    NM_ITEM, NULL, (STRPTR)"S", 0,0L, (APTR)PrefsSichern,
  82.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  83.    NM_ITEM, NULL, (STRPTR)"W", 0,0L, (APTR)SetupPrinter,
  84.    NM_ITEM, NULL, (STRPTR)"P", 0,0L, (APTR)Print,
  85.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  86.    NM_ITEM, NULL, (STRPTR)"I", 0, 0L, 0xFFFFFFFF,
  87.    NM_ITEM, NULL, (STRPTR)"#", 0, 0L, (APTR)KatalogInformation,
  88.    NM_ITEM, NULL, (STRPTR)"H", 0, 0L, (APTR)KatalogHilfe,
  89.    NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  90.    NM_ITEM, NULL, (STRPTR)"Q", 0, 0L, 0xFFFFFFFE,
  91.  
  92.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  93.    NM_ITEM, NULL, (STRPTR)"Y", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)AutoSave,
  94.  
  95.    NM_TITLE, NULL, NULL, 0, NULL, NULL,
  96.    NM_ITEM, NULL, (STRPTR)"F", 0, 0L, (APTR)Suchen,
  97.  
  98.    NM_END, NULL, NULL, 0, 0L, NULL };
  99.  
  100. UWORD KatalogGTypes[] = {
  101.    LISTVIEW_KIND,
  102.    STRING_KIND,
  103.    LISTVIEW_KIND,
  104.    STRING_KIND
  105. };
  106.  
  107. struct NewGadget KatalogNGad[] = {
  108.    346, -12, 277, 174, NULL, NULL, GD_Liste1, 0, NULL, (APTR)Liste1Clicked,
  109.    346, 161, 277, 19, NULL, NULL, GD_String1, 0, NULL, (APTR)String1Clicked,
  110.    0, -12, 339, 174, NULL, NULL, GD_Liste2, 0, NULL, (APTR)Liste2Clicked,
  111.    0, 161, 339, 19, NULL, NULL, GD_String2, 0, NULL, (APTR)String2Clicked
  112. };
  113.  
  114. ULONG *KatalogGTags[] = {
  115.    (ULONG *)(GTLV_Labels), &Liste1, (ULONG *)(TAG_DONE),
  116.    (ULONG *)(GTST_MaxChars), (ULONG *)49, (ULONG *)(TAG_DONE),
  117.    (ULONG *)(GTLV_Labels), &Liste2, (ULONG *)(TAG_DONE),
  118.    (ULONG *)(GTST_MaxChars), (ULONG *)49, (ULONG *)(TAG_DONE)
  119. };
  120.  
  121. int SetupScreen()
  122. {
  123.    if ( ! ( Scr = LockPubScreen( PubScreenName )))
  124.     {
  125.       Error(GS(25,"Unable to lock public screen!"));
  126.       return( 1L );
  127.     }
  128.  
  129.    if(Scr->Height<300)
  130.      LowRes=TRUE;
  131.    if(LowRes==TRUE)
  132.     {
  133.      topaz11.ta_Name="topaz.font";
  134.      topaz11.ta_YSize=9;
  135.     }
  136.    if ( ! ( Font = OpenDiskFont( &topaz11 )))
  137.     {
  138.       if(LowRes==FALSE)
  139.         Error(GS(25,"Unable to open font: times.font 15"));
  140.       else
  141.         Error(GS(76,"Unable to open font: topaz.font 9"));
  142.       return( 5L );
  143.     }
  144.  
  145.    if ( ! ( VisualInfo=GetVisualInfoA( Scr, NULL )))
  146.     {
  147.       Error(GS(30,"Unable to get VisualInfo!"));
  148.       return( 2L );
  149.     }
  150.  
  151.    return( 0L );
  152. }
  153.  
  154. void CloseDownScreen()
  155. {
  156.    if ( VisualInfo ) {
  157.       FreeVisualInfo( VisualInfo );
  158.       VisualInfo = NULL;
  159.    }
  160.  
  161.    if ( Scr        ) {
  162.       UnlockPubScreen( NULL, Scr );
  163.       Scr = NULL;
  164.    }
  165.  
  166.    if ( Font       ) {
  167.       CloseFont( Font );
  168.       Font = NULL;
  169.    }
  170. }
  171.  
  172. void KatalogRender()
  173. {
  174.    UWORD          offx, offy;
  175.    struct TagItem tagr[3];
  176.  
  177.    offx = OffsetX(KatalogWnd);
  178.    offy = OffsetY(KatalogWnd);
  179.  
  180.    tagr[0].ti_Tag  = GT_VisualInfo;
  181.    tagr[0].ti_Data = VisualInfo;
  182.    tagr[1].ti_Tag  = GTBB_Recessed;
  183.    tagr[1].ti_Data = TRUE;
  184.    tagr[2].ti_Tag  = TAG_DONE;
  185.  
  186.    if(LowRes==FALSE)
  187.      DrawBevelBoxA( KatalogWnd->RPort, offx, offy + 184, 623, 41, &tagr);
  188.    else
  189.      DrawBevelBoxA( KatalogWnd->RPort, offx, offy + 149, 623, 41, &tagr);
  190. }
  191.  
  192. int HandleKatalogIDCMP()
  193. {
  194.    struct IntuiMessage  *m;
  195.    struct MenuItem      *n;
  196.    int         (*func)();
  197.    int         running = 1;
  198.  
  199.    while( m = GTGetIMsg( KatalogWnd->UserPort )) {
  200.  
  201.       CopyMem(( char * )m, ( char * )&KatalogMsg, (long)sizeof( struct IntuiMessage ));
  202.  
  203.       GTReplyIMsg( m );
  204.  
  205.       switch ( KatalogMsg.Class ) {
  206.  
  207.          case  IDCMP_REFRESHWINDOW:
  208.             GTBeginRefresh( KatalogWnd );
  209.             KatalogRender();
  210.             GTEndRefresh( KatalogWnd, TRUE );
  211.             break;
  212.  
  213.          case  IDCMP_CLOSEWINDOW:
  214.            if(FastExit==TRUE)
  215.               running = 0;
  216.             else
  217.               running = 2;
  218.             break;
  219.  
  220.          case  IDCMP_GADGETUP:
  221.          case  IDCMP_GADGETDOWN:
  222.             func = ( void * )(( struct Gadget * )KatalogMsg.IAddress )->UserData;
  223.             func(KatalogMsg.Code);
  224.             break;
  225.  
  226.          case  IDCMP_MENUPICK:
  227.             while( KatalogMsg.Code != MENUNULL ) {
  228.                n = ItemAddress( KatalogMenus, KatalogMsg.Code );
  229.                func = (void *)(GTMENUITEM_USERDATA( n ));
  230.                if(!(func==0xFFFFFFFF))
  231.                  if(func==0xFFFFFFFE)
  232.                    running=0;
  233.                  else
  234.                    func(n);
  235.                else
  236.                  running=2;
  237.                KatalogMsg.Code = n->NextSelect;
  238.             }
  239.             break;
  240.       }
  241.    }
  242.    return( running );
  243. }
  244.  
  245. int OpenKatalogWindow()
  246. {
  247.    struct TagItem    tag[10];
  248.    struct NewGadget  ng;
  249.    struct Gadget  *g;
  250.    UWORD    lc, tc;
  251.    UWORD    offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  252.  
  253.    if ( ! ( g = CreateContext( &KatalogGList )))
  254.     {
  255.       Error(GS(31,"Unable to create gadgets!"));
  256.       return( 1L );
  257.     }
  258.  
  259.    for( lc = 0, tc = 0; lc < Katalog_CNT; lc++ ) {
  260.  
  261.       CopyMem((char * )&KatalogNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  262.  
  263.       ng.ng_VisualInfo = VisualInfo;
  264.       ng.ng_TextAttr   = &topaz11;
  265.       ng.ng_LeftEdge  += offx+4;
  266.       ng.ng_TopEdge   += offy+17;
  267.       if(LowRes==TRUE)
  268.        {
  269.         if(KatalogGTypes[lc]==LISTVIEW_KIND)
  270.           ng.ng_Height -= 35;
  271.         else
  272.          {
  273.           ng.ng_TopEdge -= 31;
  274.           ng.ng_Height = 13;
  275.          }
  276.        }
  277.  
  278.       KatalogGadgets[ lc ] = g = CreateGadgetA((ULONG)KatalogGTypes[ lc ], g, &ng, ( struct TagItem * )&KatalogGTags[ tc ] );
  279.  
  280.       while( KatalogGTags[ tc ] ) tc += 2;
  281.       tc++;
  282.  
  283.       if ( NOT g )
  284.        {
  285.          Error(GS(31,"Unable to create gadgets!"));
  286.          return( 2L );
  287.        }
  288.     }
  289.  
  290.    for(tc=0;tc<TEXTE;tc++)
  291.     {
  292.      if(KatalogNewMenu[tc].nm_Label==NULL)
  293.       {
  294.        Texte[tc]=GS(300+tc,Texte[tc]);
  295.        KatalogNewMenu[tc].nm_Label=Texte[tc];
  296.       }
  297.     }
  298.  
  299.    tag[0].ti_Tag = GTMN_FrontPen;
  300.    tag[0].ti_Data = 0L;
  301.    tag[1].ti_Tag = TAG_DONE;
  302.    if ( ! ( KatalogMenus = CreateMenusA( KatalogNewMenu, &tag )))
  303.     {
  304.       Error(GS(32,"Unable to create menus!"));
  305.       return( 3L );
  306.     }
  307.  
  308.    LayoutMenusA( KatalogMenus, VisualInfo, NULL );
  309.  
  310.    tag[0].ti_Tag=WA_Left;
  311.    tag[0].ti_Data=KatalogLeft;
  312.    tag[1].ti_Tag=WA_Top;
  313.    tag[1].ti_Data=KatalogTop;
  314.    tag[2].ti_Tag=WA_InnerWidth;
  315.    tag[2].ti_Data=KatalogWidth;
  316.    tag[3].ti_Tag=WA_InnerHeight;
  317.    tag[3].ti_Data=KatalogHeight;
  318.    if(LowRes==TRUE)
  319.     {
  320.      tag[1].ti_Data=0;
  321.      tag[3].ti_Data-=35;
  322.     }
  323.    tag[4].ti_Tag=WA_IDCMP;
  324.    tag[4].ti_Data=LISTVIEWIDCMP|STRINGIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  325.    tag[5].ti_Tag= WA_Flags;
  326.    tag[5].ti_Data=WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_ACTIVATE,
  327.    tag[6].ti_Tag=WA_Gadgets;
  328.    tag[6].ti_Data=KatalogGList;
  329.    tag[7].ti_Tag=WA_Title;
  330.    tag[7].ti_Data=KatalogWdt;
  331.    tag[8].ti_Tag=WA_PubScreen;
  332.    tag[8].ti_Data=Scr;
  333.    tag[9].ti_Tag=TAG_DONE;
  334.  
  335.    if ( ! ( KatalogWnd = OpenWindowTagList( NULL, &tag )))
  336.     {
  337.      Error(GS(33,"Unable to open window!"));
  338.      return( 4L );
  339.     }
  340.  
  341.    SetMenuStrip( KatalogWnd, KatalogMenus );
  342.    GTRefreshWindow( KatalogWnd, NULL );
  343.  
  344.    KatalogRender();
  345.  
  346.    return( 0L );
  347. }
  348.  
  349. void CloseKatalogWindow()
  350. {
  351.    if ( KatalogMenus      ) {
  352.       ClearMenuStrip( KatalogWnd );
  353.       FreeMenus( KatalogMenus );
  354.       KatalogMenus = NULL; }
  355.  
  356.    if ( KatalogWnd        ) {
  357.       CloseWindow( KatalogWnd );
  358.       KatalogWnd = NULL;
  359.    }
  360.  
  361.    if ( KatalogGList      ) {
  362.       FreeGadgets( KatalogGList );
  363.       KatalogGList = NULL;
  364.    }
  365. }
  366.  
  367.